package org.mte.sak.sort.comparator;

import java.util.Locale;

/**
 * Classe astratta di riferimento per un <i>Comparatore</i>
 *
 * @author Marco Traversari
 * @version $Revision: 1.2 $ $Date: 2011-12-27 11:42:33 $
 */
public abstract class AbstractComparator implements Comparator {

    /**
     * Indica il tipo di ordinamento
     */
    protected boolean isAscending = true;

    /**
     * Imposta il tipo di ordinamento.
     * Se <code>isAscending=true</code> sarà
     * un ordinamento ascendente, altrimenti discendente.
     *
     * @param isAscending
     */
    public void setAscending(boolean isAscending) {
        this.isAscending = isAscending;
    }

    /**
     * Restituisce il valore formattato secondo
     * il riferimento indicato.
     *
     * @param value
     * @param formatReference
     * @return il valore dell'oggetto.
     */
    public abstract Object getValue(String value, Object formatReference);    
    
	/**
	 * Restituisce il valore formattato secondo
	 * il riferimento indicato.
	 *
 	 * @param value
	 * @param formatReference
	 * @param locale
	 * @return il valore formattato
	 */
  	public abstract Object getValue(String value, Object formatReference, Locale locale);

    /**
     * Confronta i valori dei due elementi specificati e restituisce
     * un tipo <code>boolean</code> in funzione dell'esito
     * della comparazione e del tipo di ordinamento impostato.
     *
     * @param obj1
     * @param obj2
     * @return true, false.
     */
    public abstract boolean compare(Object obj1, Object obj2);

    /**
     * Confronta i valori dei due elementi specificati e restituisce
     * un tipo <code>int</code> in funzione dell'esito
     * della comparazione.
     *
     * @param obj1
     * @param obj2
     *
     * @return "0" se obj2 = obj1; "<0" se obj1 < obj2; ">0" obj1 > obj2.
     */
    public abstract int compareOneToOne(Object obj1, Object obj2);
}
